/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.epsgrau.DAO;

import java.util.List;
import org.epsgrau.TO.JuzgadoTO;
import org.epsgrau.TO.MateriaTO;
import org.epsgrau.TO.ProcesoTO;
import org.epsgrau.TO.RamaTO;
import org.epsgrau.TO.ResponsableTO;
import org.epsgrau.TO.TipoJuzgadoTO;
import org.epsgrau.TO.TipoProcesoTO;
import org.epsgrau.entity.Proceso;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

/**
 *
 * @author Miguel
 */
@Repository
public class ProcesoDAO extends HibernateDaoSupport implements ProcesoDAOInterface{

    @Autowired
    public ProcesoDAO(SessionFactory sessionFactory) {
        super.setSessionFactory(sessionFactory);
    }
        
    @Override
    public boolean insertarActualizaProceso(Proceso p) {
        boolean b=false;
        try{
        getHibernateTemplate().saveOrUpdate(p);
//        Session session = getHibernateTemplate().getSessionFactory().openSession();
//        Query consulta =session.createSQLQuery("INSERT INTO public.\"PROCESO\" (id_proceso,nro_expediente)"+
//        "VALUES('"+p.getIdProceso()+"','"+p.getNroExpediente()+"')");
//        consulta.executeUpdate();

        
            b=true;
        }catch(Exception e){
            e.printStackTrace();
        }
        return b;
    }

    @Override
    public boolean EliminarProceso(Proceso p) {
        boolean b=false;
        try{
            getHibernateTemplate().delete(p);
            b=true;
        }catch(Exception e){
            e.printStackTrace();
        }
        return b;
    }
    
    @Override
    public List<JuzgadoTO> getListaJuzgados() {
    Session session = getHibernateTemplate().getSessionFactory().openSession();
    Query consulta = session.createSQLQuery("select id_juzgado as idjuzgado,"
                     + "descripcion as descjuzgado from public.juzgado")
	        .setResultTransformer(Transformers.aliasToBean(JuzgadoTO.class));
                return consulta.list();
    }

    @Override
    public List<MateriaTO> getListaMaterias() {
    Session session = getHibernateTemplate().getSessionFactory().openSession();
    Query consulta = session.createSQLQuery("select id_materiaproceso as idmateria,"
                     + "descripcion as descmateria from public.materia_proceso")
	        .setResultTransformer(Transformers.aliasToBean(MateriaTO.class));
                return consulta.list();
    }

    @Override
    public List<RamaTO> getListaRamas() {
    Session session = getHibernateTemplate().getSessionFactory().openSession();
    Query consulta = session.createSQLQuery("select id_ramaproceso as idrama,"
                     + "descripcion as descrama from public.rama_proceso")
	        .setResultTransformer(Transformers.aliasToBean(RamaTO.class));
                return consulta.list();
    }

    @Override
    public List<ResponsableTO> getListaResponsables() {
    Session session = getHibernateTemplate().getSessionFactory().openSession();
    Query consulta = session.createSQLQuery("select id_responsable as idresponsable,"
                     + "descripcion as descresponsable from public.responsable")
	        .setResultTransformer(Transformers.aliasToBean(ResponsableTO.class));
                return consulta.list();
    }

    @Override
    public List<TipoJuzgadoTO> getListaTipoJuzgados() {
    Session session = getHibernateTemplate().getSessionFactory().openSession();
    Query consulta = session.createSQLQuery("select id_juzgado as idjuzgado,"
                     + "descripcion as descjuzgado from public.juzgado")
	        .setResultTransformer(Transformers.aliasToBean(JuzgadoTO.class));
                return consulta.list();
    }

    @Override
    public List<TipoProcesoTO> getListaTipoProcesos() {
    Session session = getHibernateTemplate().getSessionFactory().openSession();
    Query consulta = session.createSQLQuery("select id_tipoproceso as idtipoproceso,"
                     + "descripcion as desctipoproceso from public.tipo_proceso")
	        .setResultTransformer(Transformers.aliasToBean(TipoProcesoTO.class));
                return consulta.list();
    }

    @Override
    public List<ProcesoTO> getListaProcesos() {
         Session session = getHibernateTemplate().getSessionFactory()
				.openSession();
		Query consulta = session
				.createSQLQuery(
			"select p.id_proceso as idproceso,"
                        + " p.nro_expediente as nroexpediente,"
                        + " r.descripcion as descrama,"
                        + " m.descripcion as descmateria,"
                        + " CAST(p.fecha_demanda as VARCHAR) as fechademanda,"
                        + " p.demandante as demandante,"
                        + " p.demandado as demandado"
                        + " from public.proceso p"
                        + " INNER JOIN public.rama_proceso r ON p.id_Ramaproceso=r.id_Ramaproceso "
                        + " INNER JOIN public.materia_proceso m ON p.id_Materiaproceso=m.id_Materiaproceso")
				.setResultTransformer(Transformers.aliasToBean(ProcesoTO.class));
                return consulta.list();
    }


    @Override
        public Proceso getBuscaProceso(String id) {
         return this.getHibernateTemplate().get(Proceso.class, id);

    }
    
    @Override
      public List<ProcesoTO> getListaProcesosPorNroExpediente() {
         Session session = getHibernateTemplate().getSessionFactory().openSession();
       
          Query consulta = session.createSQLQuery("select id_proceso as idproceso,"
                                                + "nro_expediente as nroexpediente from public.proceso ")
	        .setResultTransformer(Transformers.aliasToBean(ProcesoTO.class));
    
                return consulta.list();
    }

    @Override
    public List<TipoProcesoTO> getTipoProcesoPorRama(String query) {
         Session session = getHibernateTemplate().getSessionFactory().openSession();
          Query consulta = session.createSQLQuery("select rt.id_Tipoproceso as idtipoproceso ,t.descripcion as desctipoproceso from public.rama_tipo_proceso rt\n" +
          "  INNER JOIN public.tipo_proceso t ON rt.id_Tipoproceso=t.id_Tipoproceso\n" +
          "where rt.id_Ramaproceso='"+query+"'")
	        .setResultTransformer(Transformers.aliasToBean(TipoProcesoTO.class)); 
                return consulta.list();
    }

    @Override
    public List<MateriaTO> getMateriaProcesoPorRama(String query) {
         Session session = getHibernateTemplate().getSessionFactory().openSession();
          Query consulta = session.createSQLQuery("select rm.id_materiaproceso as idmateria,m.descripcion as descmateria from public.rama_materia_proceso rm\n" +
        "  INNER JOIN public.materia_proceso m ON rm.id_materiaproceso=m.id_materiaproceso\n" +
        "where rm.id_ramaproceso='"+query+"'")
	        .setResultTransformer(Transformers.aliasToBean(MateriaTO.class)); 
                return consulta.list();
    }
    
}
